﻿#include<iostream>
using namespace std;

//int main()
//{
//	int a = 0;
//	double b = 0.1;
//	char c = 'x';
//
//	cin >> a >> b >> c;
//	cout << a << ' ' << b << ' ' << c << endl;
//	return 0;
//}
void Func(int a = 10)
{
	cout << a << '\n';
}

// 全缺省
void Func1(int a = 10, int b = 20, int c = 30)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl << endl;
}
// 半缺省
void Func2(int a, int b = 10, int c = 20)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl << endl;
}

void f1()
{
	cout << "f()" << endl;
}
void f1(int a = 10)
{
	cout << "f(int a)" << endl;
}

void Swap(int& rx, int& ry)
{
	int tmp = rx;
	rx = ry;
	ry = tmp;
}
//int main()
//{
//	const int& rc = 30;
//
//	int a = 1, b = 3;
//	const int& rd = (a + b);
//
//	double d = 12.34;
//	const int& ri = d;
//
//	return 0;
//}
//void f(int x)
//{
//	cout << "f(int x)" << endl;
//}
//void f(int* ptr)
//{
//	cout << "f(int* ptr)" << endl;
//}
//int main()
//{
//	f(0);
//	f(NULL);
//	// 本想通过f(NULL)调⽤指针版本的f(int*)函数，但是由于NULL被定义成0，调⽤了f(x)，因此与程序的初衷相悖。f(NULL);f((int*)NULL);
//	// 编译报错：error C2665: “f”: 2 个重载中没有⼀个可以转换所有参数类型
//	// f((void*)NULL);
//	f(nullptr);
//	return 0;
//}

class stack
{
	void Push(int x)
	{}

public:
	void Pop()
	{}
	int Top()
	{}

private:
	int* _a;
	int _top;
	int _capacity;
};

//int main()
//{
//	stack st;
//	st.Pop();
//	st.Top();
//	st.Push();
//	return 0;
//}
//#include<iostream>
//using namespace std;
//// 计算⼀下A/B/C实例化的对象是多⼤？
//class A
//{
//public:
//	void Print()
//	{
//		cout << _ch << endl;
//	}
//private:
//	char _ch;
//	int _i;
//};
//class B
//{
//public:
//	void Print()
//	{
//		//...
//	}
//};
//class C
//{};
//int main()
//{
//	A a;
//	B b;
//	C c;
//	cout << sizeof(a) << endl;
//	cout << sizeof(b) << endl;
//	cout << sizeof(c) << endl;
//	return 0;
//}

//class Date
//{
//public:
//	// void Init(Date* const this, int year, int month, int day)
//	void Init(int year, int month, int day)
//	{
//		// this->_year = year;
//		_year = year;
//		this->_month = month;
//		this->_day = day;
//	}
//	void Print()
//	{
//	cout << _year << "/" << _month << "/" << _day << endl;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//int main()
//{
//	Date d1;
//	Date d2;
//	// d1.Init(&d1, 2024, 3, 31);
//	d1.Init(2024, 3, 31);
//	// d1.Print(&d1);
//	d1.Print();
//	// d1.Init(&d2, 2024, 7, 5);
//	d2.Init(2024, 7, 5);
//	// d1.Print(&d2);
//	d2.Print();
//	return 0;
//}
class Date
{
public:
	// 1.⽆参构造函数
	//Date()
	//{
	//	_year = 1;
	//	_month = 1;
	//	_day = 1;
	//}
	//// 2.带参构造函数
	//Date(int year, int month, int day)
	//{
	//	_year = year;
	//	_month = month;
	//	_day = day;
	//}
	// 3.全缺省构造函数
	Date(int year = 1, int month = 1, int day = 1)
	{
	_year = year;
	_month = month;
	_day = day;
	}
	void Print()
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Date d1(2024, 7, 12);
	d1.Print();

	Date d2(d1);
	d2.Print();
	return 0;
}
// ⽤最新加了构造和析构的C++版本Stack实现


//typedef int STDataType;
//class Stack
//{
//public:
//	//构造函数
//	Stack(int n = 4)
//	{
//		_a = (STDataType*)malloc(sizeof(STDataType) * n);
//		if (nullptr == _a)
//		{
//			perror("malloc申请空间失败");
//			return;
//		}
//		_capacity = n;
//		_top = 0;
//	}
//	//析构函数
//	~Stack()
//	{
//		cout << "~Stack()" << endl;
//		free(_a);
//		_a = nullptr;
//		_top = _capacity = 0;
//	}
//private:
//	STDataType* _a;
//	size_t _capacity;
//	size_t _top;
//};
//
//
//int main()
//{
//	Stack st;
//	return 0;
//}